<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>lianxi01</title>
  </head>
  <body>
    <script type="text/javascript">
      console.log("========参数==========");
      function f1(x){
        return x * x;
      }
      console.log(f1(2));
      console.log(f1(3));
      function f2(a,b){

      }
      f2('a','b','c');
      console.log(f2.length);
      console.log("========传递方式-传值传递========");
      //函数参如果是原始类型的值（数值、字符串、布尔值），
      //传递方式是传值传递（passes by value).
      //这意味着，在函数体内修改参数值，不会影响到函数外部。
      var a = 2;
      function f3(a){
        a=3;
      }
      console.log(f3(a));
      console.log("=======传递方式-传址传递========");
      var obj={
        name:1,
      }
      function f4(o){
        o.name=2;
        o.age=18;
      }
      f4(obj);
      console.log(obj.name);
      console.log("=========传递方式-传址传递==========");
      //注意：如果函数内部修改的
      //不是参数对象的某个属性，而是替换掉整个参数，这是不会影响到原始值。
      var arr = [1,2,3];
      function f5(b){
        b=[2,3,4];
      }
      f5(arr);
      console.log(arr);
      console.log("============同名参数==========");
      //如果有同名的参数，测区最后出现的那个值。
      function f6(a,a){
        return a;
      }
      console.log(f6(2,3));
      console.log("=======arguments对象=======");
      var num=function(a,b,c){
        console.log(arguments[0]);
        console.log(arguments[1]);
        console.log(arguments[2]);
      }
      num(1,2,3);
      console.log("=======闭包==========");
      function f7(){
        var n=99;
        function f8(n){
          console.log(n);
        }
        return f8(n);
      }
      f7();
    </script>
  </body>
</html>
